﻿'FALTA: COMPROBAR SI HABILITA BIEN EL CAMPO CUANDO NO HAY NOTA CARGADA PARA EL ALUMNO
' -VER QUE CARGUE LA GRILLA DE NOTAS YA CARGADAS
' -QUE PUEDA SELECCIONAR Y MODIFICAR/ELIMINAR LA NOTA DE ESA GRILLA
'. HACER QUE BUSQUE POR ALGUNO DE LOS DOS CRITERIOS..... ESTAN LOS METODOS DEFINIDOS , PERO FALTA
' PROBAR QUE FUNCIONEN BIEN!
Public Class frm_ABM_NotasExamen
    Dim examen As frm_ABM_Examenes
    Dim legajoAlumno As Integer
    Dim acceso As New AccesoBD

    Enum estado
        insertar
        modificar
        eliminar
    End Enum
    Dim accion As New estado

    Private Sub frm_ABM_NotasExamen_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        cargarGrillaAlumnos()
        cargarGrillaNotas()
        btnGuardar.Enabled = False
        btnCancelar.Enabled = False
        btnNuevo.Enabled = False
        gridDatosExamen.Enabled = False
        txt_nota.ReadOnly = True
        Me.grillaAlumnos.Focus()

    End Sub
    'ok
    Private Sub grillaNotas_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles grillaNotas.SelectionChanged
        If grillaNotas.SelectedRows.Count > 0 Then
            legajoAlumno = grillaNotas.Item("legajoNota", grillaNotas.SelectedRows(0).Index).Value
            cargarDatosExamenNota()
        End If
    End Sub
    'ok
    Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevo.Click
        txt_nota.ReadOnly = False
        limpiarCampos()
        Me.txt_alumno.Text = legajoAlumno
        gridDatosExamen.Enabled = True
        btnGuardar.Enabled = True
        btnCancelar.Enabled = True
        accion = estado.insertar
        grillaAlumnos.Enabled = False
        txt_nota.Focus()
    End Sub
    'OK
    Private Sub cargarDatosExamenNota()
        limpiarCampos()
        Dim comando As String
        Dim tabla As DataTable
        comando = " DetalleExamenes d where d.idCurso=" & Integer.Parse(Me.txt_id.Text)
        comando &= " and d.fechaExamen='" & DateTime.Parse(Me.txt_fecha_examen.Text)
        comando &= "' and d.fechaInicioCurso='" & DateTime.Parse(Me.txt_fecha_curso.Text)
        comando &= "' and d.legajoAlumno=" & Me.legajoAlumno

        tabla = acceso.devuelveTabla(comando)
        Dim fila As DataRow = tabla.Rows(0)
        Me.txt_alumno.Text = CSng(fila("legajoAlumno"))
        Me.txt_nota.Text = CSng(fila("nota"))
        Me.txt_nota.ReadOnly = True

    End Sub
    'OK
    Private Sub cargarGrillaAlumnos()
        Dim comando As String
        Dim tabla As DataTable
        comando = "select distinct a.legajoAlumno, a.apellido, a.nombre from CuotasXAlumno cxa, Alumnos a where cxa.idCurso="
        comando &= Me.txt_id.Text & " and cxa.fechaInicio='" & DateTime.Parse(Me.txt_fecha_curso.Text)
        comando &= "' and cxa.legajoAlumno=a.legajoAlumno"

        tabla = acceso.ejecutaSQL(comando)
        If tabla.Rows.Count = 0 Then
            MsgBox("No hay alumnos inscriptos en este curso!")
            Me.btnVolver.Focus()
            Exit Sub
        End If
        Dim c As Integer
        For c = 0 To tabla.Rows.Count - 1
            Me.grillaAlumnos.Rows.Add(tabla.Rows(c)("legajoAlumno"), tabla.Rows(c)("apellido"), tabla.Rows(c)("nombre"))
        Next

    End Sub
    'OK
    Private Sub limpiarCampos()
        Me.txt_alumno.Text = ""
        Me.txt_nota.Text = ""
    End Sub

    Private Sub txt_nota_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_nota.KeyPress
        If IsNumeric(e.KeyChar) = False Then
            MsgBox("Caracter no válido! Ingrese SOLO numeros", vbCritical, "Importante")
            e.KeyChar = ""
        End If
    End Sub
    'OK
    Private Sub txt_nota_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txt_nota.Validated
        If txt_nota.Text = "" Then
            MsgBox("Ingrese nota!")
            txt_nota.Focus()
            Exit Sub
        End If
        If Integer.Parse(txt_nota.Text) > 10 Or Integer.Parse(txt_nota.Text) < 0 Then
            MsgBox("La nota puede estar en un rango del 0 al 10!")
            txt_nota.Focus()
            Exit Sub
        End If
    End Sub
    Private Function buscarNota() As Boolean
        Dim consulta = "select * from DetalleExamenes where legajoAlumno=" & Integer.Parse(Me.txt_alumno.Text)
        Dim tabla = acceso.ejecutaSQL(consulta)
        If tabla.Rows.Count = 0 Then
            Return False
        End If
        Return True
    End Function
    Private Function validar() As Boolean
        Return True
    End Function
    Private Sub btnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGuardar.Click

        Dim comando As String
        If accion = estado.insertar Then
            If validar() Then
                comando = "insert into DetalleExamenes values(" & Integer.Parse(Me.txt_id.Text)
                comando &= ",'" & DateTime.Parse(Me.txt_fecha_curso.Text) & "','"
                comando &= DateTime.Parse(Me.txt_fecha_examen.Text)
                comando &= "'," & Integer.Parse(Me.legajoAlumno) & "," & Integer.Parse(Me.txt_nota.Text) & ")"
                acceso._insertar(comando)
            End If
            
        End If
        If accion = estado.modificar Then
            If validar() Then
                comando = "update DetalleExamenes set nota=" & Me.txt_nota.Text
                comando &= " where idCurso=" & Integer.Parse(Me.txt_id.Text)
                comando &= " and fechaInicioCurso='" & DateTime.Parse(Me.txt_fecha_curso.Text)
                comando &= "' and fechaExamen='" & DateTime.Parse(Me.txt_fecha_examen.Text) & "'"
                comando &= " and legajoAlumno=" & Integer.Parse(Me.txt_alumno.Text)
                acceso._modificar(comando)
            End If
         
        End If
        If accion = estado.eliminar Then
            comando = "delete DetalleExamenes where idCurso=" & Integer.Parse(Me.txt_id.Text)
            comando &= " and fechaInicioCurso='" & DateTime.Parse(Me.txt_fecha_curso.Text)
            comando &= "' and fechaExamen= '" & DateTime.Parse(Me.txt_fecha_examen.Text) & "'"
            comando &= " and legajoAlumno=" & Integer.Parse(Me.txt_alumno.Text)
            acceso._eliminar(comando)
        End If
        cargarGrillaNotas()
        btnGuardar.Enabled = False
        btnCancelar.Enabled = False
        btnNuevo.Enabled = True
        Me.grillaAlumnos.Enabled = True
        Me.grillaAlumnos.Focus()

    End Sub
    'OK, este se usa para cargar el campo de nota, si el alumno tiene nota cargada
    Private Function existeNota(ByVal buscado As Integer) As Boolean
        Dim comando As String
        comando = "DetalleExamenes d"
        comando &= " where d.idCurso=" & Integer.Parse(Me.txt_id.Text)
        comando &= " and d.fechaInicioCurso='" & DateTime.Parse(Me.txt_fecha_curso.Text)
        comando &= "' and d.fechaExamen= '" & DateTime.Parse(Me.txt_fecha_examen.Text) & "'"
        comando &= " and d.legajoAlumno=" & Integer.Parse(buscado)
        Dim tabla As DataTable = acceso.devuelveTabla(comando)
        If tabla.Rows.Count > 0 Then
            Return True
            Exit Function
        End If
        Return False
    End Function
    'los parametros opcionales son para busqueda
    Private Sub cargarGrillaNotas(Optional ByRef legajo As String = "", Optional ByRef apellido As String = "")
        Dim tabla As New DataTable
        Dim comando As String
        'Dim lala As DateTime
        If legajo <> "" Or apellido <> "" Then
            'select * from DetalleExamenes d, Alumnos a
            'where d.idCurso=1 and d.fechaInicioCurso=CONVERT(datetime,'12-12-2013')
            'and d.fechaExamen=CONVERT(datetime, '26-12-2013') 
            'and (a.legajoAlumno=0 or a.apellido='Perez')
            'and d.legajoAlumno=a.legajoAlumno
            comando = "DetalleExamenes d, Alumnos a where d.idCurso=" & Integer.Parse(Me.txt_id.Text)
            comando &= " and d.fechaInicioCurso='" & DateTime.Parse(Me.txt_fecha_curso.Text)
            comando &= "' and d.fechaExamen='" & DateTime.Parse(Me.txt_fecha_examen.Text)
            comando &= "' and (a.legajoAlumno=" & legajo & "or a.apellido= '" & apellido
            comando &= "') and d.legajoAlumno=a.legajoAlumno"
        Else
            comando = "DetalleExamenes d, Alumnos a where d.idCurso=" & Integer.Parse(Me.txt_id.Text)
            comando &= " and d.fechaInicioCurso='" & DateTime.Parse(Me.txt_fecha_curso.Text)
            comando &= "' and d.fechaExamen= '" & DateTime.Parse(Me.txt_fecha_examen.Text) & "'"
            comando &= " and d.legajoAlumno=a.legajoAlumno"
        End If

        'lala = DateTime.Parse(Me.txt_fecha_curso.Text).Date --> para mostrar solo la fecha de algo

        tabla = acceso.devuelveTabla(comando)

        grillaNotas.Rows.Clear()
        Dim c As Integer
        For c = 0 To tabla.Rows.Count - 1
            grillaNotas.Rows.Add(tabla.Rows(c)("nota"), tabla.Rows(c)("legajoAlumno"), tabla.Rows(c)("nombre"), tabla.Rows(c)("apellido"))
        Next
        'SEGUIR DESDE ACA MAÑANA!!!!! LARGAR CON: UNA VEZ QUE YA CARGUE LA TABLA DE NOTAS...
    End Sub
    'OK
    Private Sub grillaAlumnos_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles grillaAlumnos.SelectionChanged
        'Establezco el legajo del alumno
        limpiarCampos()
        If grillaAlumnos.SelectedRows.Count > 0 Then
            Me.legajoAlumno = grillaAlumnos.Item("legajo", grillaAlumnos.SelectedRows(0).Index).Value
            If Me.existeNota(Me.legajoAlumno) Then
                cargarDatosExamenNota()
                gridDatosExamen.Enabled = True
                Me.txt_nota.ReadOnly = True
            Else
                Me.btnNuevo.Enabled = True  
            End If
        End If
    End Sub

    Private Sub ModificarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ModificarToolStripMenuItem.Click
        accion = estado.modificar
        gridDatosExamen.Enabled = True
        btnNuevo.Enabled = False
        btnGuardar.Enabled = True
        btnCancelar.Enabled = True
        btnCancelar.Enabled = True
        Me.txt_nota.ReadOnly = False
        Me.txt_nota.Focus()
    End Sub

    Private Sub EliminarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EliminarToolStripMenuItem.Click
        If MessageBox.Show("Esta seguro que desea eliminar el registro?!", "Eliminar", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
            accion = estado.eliminar
            btnNuevo.Enabled = False
            btnGuardar.Enabled = True
            btnCancelar.Enabled = True
            Me.btnGuardar.Focus()
        End If
    End Sub

    Private Sub btnBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscar.Click
        ' ya comprobe en el validated que ninguno de los dos este vacio, entonces
        'si legajo esta vacio, el de apellido tiene que tener algo
        If Me.txt_busq_legajo.Text = "" Then
            cargarGrillaNotas(txt_busq_apellido.Text)
        Else 'si el de legajo esta con algo, tmb verifico que haya algo en apellido
            If txt_busq_apellido.Text = "" Then
                'si no hay nada, paso el legajo nomas
                cargarGrillaNotas(txt_busq_legajo.Text)
            End If
            ' si hay algo, paso los dos textos
            cargarGrillaNotas(txt_busq_legajo.Text, txt_busq_apellido.Text)
        End If
        Me.txt_busq_legajo.Text = ""
        Me.txt_busq_apellido.Text = ""
    End Sub

    Private Sub txt_busq_apellido_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txt_busq_apellido.Validated
        If txt_busq_legajo.Text = "" Then
            If txt_busq_apellido.Text = "" Then
                MsgBox("Debe ingresar un parámetro de búsqueda")
                txt_busq_legajo.Focus()
                Exit Sub
            End If
        End If
    End Sub

    Private Sub btnVolver_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVolver.Click
        Me.Close()
    End Sub
End Class